package com.lcredu.lcrliving.commodity.entity;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.util.Date;

import com.lcredu.common.valid.EnumValidate;
import com.lcredu.common.valid.SaveGroup;
import com.lcredu.common.valid.UpdateGroup;
import com.lcredu.common.valid.UpdateIsShowGroup;
import lombok.Data;
import org.hibernate.validator.constraints.URL;

import javax.validation.constraints.*;

/**
 * 家居品牌
 *
 * @author lcr
 * @email lcr@gmail.com
 * @date 2023-09-21 16:07:18
 */
@Data
@TableName("commodity_brand")
public class BrandEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * id
     * 1. @NotNull(message = "修改要求指定id", groups = {UpdateGroup.class})
     * 表示在修改的时候按照UpdateGroup组修改
     * 2. @Null(message = "添加不能指定id", groups = {SaveGroup.class})
     * 表示在添加的时候按照SaveGroup修改
     * 单独为了switch修改状态而添加
     */
    @TableId
    @NotNull(message = "修改要求指定id", groups = {UpdateGroup.class, UpdateIsShowGroup.class})
    @Null(message = "添加不能指定id", groups = {SaveGroup.class})
    private Long id;
    /**
     * 品牌名
     * 前提:web启动器已经引入了validation
     * 1.@NotBlank表示name必须非空
     * 2.message是指定的一个消息返回
     * 3.如果没有指定,就会返回默认消息    javax.validation.constraints.NotBlank.message
     * 4.这个默认的消息在ValidationMessages_zh_CN.properties类中
     * org.hibernate.validator.constraints.NotBlank.message                = \u4e0d\u80fd\u4e3a\u7a7a
     * 5. @NotBlank可以用于CharSequence
     * 6.groups = {SaveGroup.class,UpdateGroup.class} 两个组都生效
     */
    @NotBlank(message = "品牌名不能为空", groups = {SaveGroup.class, UpdateGroup.class})
    private String name;
    /**
     * logo(对应一张图片的url)
     * 组合起来校验
     */
    @NotBlank(message = "logo不能为空", groups = {SaveGroup.class})
    @URL(message = "logo不是一个合法的URL", groups = {SaveGroup.class, UpdateGroup.class})
    private String logo;
    /**
     * 说明
     */
    private String description;
    /**
     * 显示
     * 1.这里我们使用的注解是@NotNull,他可以接收任意类型
     * 2.如果这里使用@NotBlank，会报错,因为@notblank不支持integer
     * 3.需要知道注解用在哪些类型上
     * 4.如果规定是0/1,后面通过自定义约束来解决
     * 5.如果是string类型就可以直接使用@Pattern来进行进一步校验
     */
    @NotNull(message = "显示状态不能为空", groups = {SaveGroup.class, UpdateGroup.class, UpdateIsShowGroup.class})
    //正则表达式并不能直接用于数字上面
//    @Pattern(regexp = "^[0-1]$", message = "显示状态必须是0或者1", groups = {SaveGroup.class, UpdateGroup.class})
    @EnumValidate(values = {0, 1}, message = "显示状态的值需要是0或者1~", groups = {SaveGroup.class, UpdateGroup.class, UpdateIsShowGroup.class})
    //下面是小实验-用自定义注解校验器把规则定义成正则表达
//    @EnumValidate(regexp = "^[0-9]$", message = "显示状态的值需要是0或者1~", groups = {SaveGroup.class, UpdateGroup.class})
    private Integer isshow;
    /**
     * 检索首字母
     * pattern必须用于字符串
     */
    @NotBlank(message = "检索首字母不能为空", groups = {SaveGroup.class})
    @Pattern(regexp = "^[a-zA-Z]$", message = "检索首字母必须是a-z,A-Z", groups = {SaveGroup.class, UpdateGroup.class})
    private String firstLetter;
    /**
     * 排序
     */
    @NotNull
    @Min(value = 0, message = "排序值必须大于或者等于0", groups = {SaveGroup.class})
    private Integer sort;

}
